package fr.mmt.gisfizz.service;

import java.io.Serializable;
import java.util.Map;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

/**
 * CRUD Service.<br/>
 *
 * @author Mathieu MAST
 */
public interface CrudService<T, PK extends Serializable> {

    /**
     *
     * @return
     */
    long count();

    /**
     *
     * @param pk
     */
    void delete(PK pk);

    /**
     *
     * @param obj
     */
    void delete(T obj);

    /**
     *
     * @param searchMap
     * @param page
     * @return
     */
    Page<T> search(Map<String, String> searchMap, Pageable page);

    /**
     *
     * @param pk
     * @return
     */
    T getByPk(PK pk);

    /**
     *
     * @param obj
     * @return
     */
    T save(T obj);
}
